--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / ping / PingPage.vue
Displaying Raw • Download
meshchatx/src/frontend/components/ping/PingPage.vue 66d98f4d33c0e00b4fff970f3582151f5deb2494 (66d98f4d) Text, 14.22 KB
T8b949e<!-- SPDX-License-Identifier: 0BSD AND MIT -->
Tb4b4b4<Tff7b72templateTb4b4b4>
T8b949e<!-- eslint-disable vue/no-v-html -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col flex-1 overflow-hidden min-w-0 bg-slate-50 dark:bg-zinc-950"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto w-full px-4 md:px-5 lg:px-8 py-6 pb-[max(1.5rem,env(safe-area-inset-bottom))]"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4 w-full max-w-4xl mx-auto"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-5"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.tools"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-2xl font-semibold text-gray-900 dark:text-white"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.title"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-600 dark:text-gray-300"Tb4b4b4>
T8b949e<!-- eslint-disable-next-line vue/no-v-html -->
Tb4b4b4<Tff7b72span
Te6edf3v-htmlTff7b72=Ta5d6ff"
Te6edf3$tTb4b4b4(Ta5d6ff'ping.description'Tb4b4b4, Tb4b4b4{
Te6edf3codeTff7b72: Ta5d6ff'<code class=\'font-mono text-xs\'>lxmf.delivery</code>'Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"grid md:grid-cols-2 gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"glass-label"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.destination_hash"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3destinationHashTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"e.g. 7b746057a7294469799cd8d7d429676a"
Te6edf3classTff7b72=Ta5d6ff"input-field font-mono"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"glass-label"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.timeout_seconds"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3timeoutTa5d6ff" Te6edf3typeTff7b72=Ta5d6ff"number" Te6edf3minTff7b72=Ta5d6ff"1" Te6edf3classTff7b72=Ta5d6ff"input-field" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3isRunningTa5d6ff" Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"primary-chip" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3startTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"play" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.start_ping"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-else
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip text-red-600! dark:text-red-300! border-red-200! dark:border-red-500/50!"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3stopTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"pause" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.stop"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"secondary-chip" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3clearTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"broom" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.clear_results"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"danger-chip" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3dropPathTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"link-variant-remove" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.drop_path"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-2 text-xs font-semibold"Tb4b4b4>
Tb4b4b4<Tff7b72span
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3isRunning
Tff7b72? Ta5d6ff'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200'
Tff7b72: Ta5d6ff'bg-gray-200 text-gray-700 dark:bg-zinc-800 dark:text-gray-200'Tb4b4b4,
Ta5d6ff'rounded-full px-3 py-1'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.status"Tb4b4b4) Tff7b72}}: Tff7b72{{ Te6edf3isRunning Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"ping.running"Tb4b4b4) Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"ping.idle"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3lastPingSummaryTff7b72?Tb4b4b4.Te6edf3durationTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"rounded-full px-3 py-1 bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-200"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.last_rtt"Tb4b4b4) Tff7b72}}: Tff7b72{{ Te6edf3lastPingSummaryTb4b4b4.Te6edf3duration Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3lastPingSummaryTff7b72?Tb4b4b4.Te6edf3errorTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"rounded-full px-3 py-1 bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-200"
Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.last_error"Tb4b4b4) Tff7b72}}: Tff7b72{{ Te6edf3lastPingSummaryTb4b4b4.Te6edf3error Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card flex flex-col min-h-[320px] space-y-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.console_output"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-gray-400"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.streaming_responses"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-gray-400"Tb4b4b4>seq #Tff7b72{{ Te6edf3seq Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3lastPingSummary Tff7b72&& Tff7b72!Te6edf3lastPingSummaryTb4b4b4.Te6edf3errorTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-2 text-xs text-gray-700 dark:text-gray-200"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3lastPingSummaryTb4b4b4.Te6edf3hopsThere Tff7b72!= Tff7b72nullTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"stat-chip"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"rnprobe.hops"Tb4b4b4) Tff7b72}} there: Tff7b72{{ Te6edf3lastPingSummaryTb4b4b4.Te6edf3hopsThere Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3lastPingSummaryTb4b4b4.Te6edf3hopsBack Tff7b72!= Tff7b72nullTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"stat-chip"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"rnprobe.hops"Tb4b4b4) Tff7b72}} back: Tff7b72{{ Te6edf3lastPingSummaryTb4b4b4.Te6edf3hopsBack Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3lastPingSummaryTb4b4b4.Te6edf3rssi Tff7b72!= Tff7b72nullTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"stat-chip"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"rnprobe.rssi"Tb4b4b4) Tff7b72}} Tff7b72{{ Te6edf3lastPingSummaryTb4b4b4.Te6edf3rssi Tff7b72}} dBmTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3lastPingSummaryTb4b4b4.Te6edf3snr Tff7b72!= Tff7b72nullTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"stat-chip"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"rnprobe.snr"Tb4b4b4) Tff7b72}} Tff7b72{{ Te6edf3lastPingSummaryTb4b4b4.Te6edf3snr Tff7b72}} dBTb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3lastPingSummaryTb4b4b4.Te6edf3quality Tff7b72!= Tff7b72nullTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"stat-chip"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"rnprobe.quality"Tb4b4b4) Tff7b72}} Tff7b72{{ Te6edf3lastPingSummaryTb4b4b4.Te6edf3quality Tff7b72}}%Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3lastPingSummaryTb4b4b4.Te6edf3viaTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"stat-chip"
Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.interfaces"Tb4b4b4) Tff7b72}} Tff7b72{{ Te6edf3lastPingSummaryTb4b4b4.Te6edf3via Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72span
Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3idTff7b72=Ta5d6ff"results"
Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto rounded-2xl bg-black/80 text-emerald-300 font-mono text-xs p-3 space-y-1 shadow-inner border border-zinc-900"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3pingResultsTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"text-emerald-500/80"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"ping.no_pings_yet"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Tb4b4b4(Te6edf3pingResultTb4b4b4, Te6edf3indexTb4b4b4) Tff7b72in Te6edf3pingResultsTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Ta5d6ff`Tffd700${Te6edf3indexTffd700}Ta5d6ff-Tffd700${Te6edf3pingResultTffd700}Ta5d6ff`Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"whitespace-pre-wrap"
Tb4b4b4>
Tff7b72{{ Te6edf3pingResult Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3DialogUtils Tff7b72from Ta5d6ff"../../js/DialogUtils"Tb4b4b4;
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"PingPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3isRunningTff7b72: Tff7b72falseTb4b4b4,
Te6edf3destinationHashTff7b72: Tff7b72nullTb4b4b4,
Te6edf3timeoutTff7b72: T79c0ff10Tb4b4b4,
Te6edf3seqTff7b72: T79c0ff0Tb4b4b4,
Te6edf3pingResultsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3abortControllerTff7b72: Tff7b72nullTb4b4b4,
Te6edf3lastPingSummaryTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3beforeUnmountTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3queryTb4b4b4.Te6edf3hashTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72= Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3queryTb4b4b4.Te6edf3hashTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3queryTb4b4b4.Te6edf3autostart Tff7b72=== Ta5d6ff"1" Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$routeTb4b4b4.Te6edf3queryTb4b4b4.Te6edf3autostart Tff7b72=== Ta5d6ff"true"Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Tff7b72async Te6edf3startTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// do nothing if already running
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isRunningTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// simple check to ensure destination hash is valid
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72== Tff7b72null Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4.Te6edf3length Tff7b72!== T79c0ff32Tb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"ping.invalid_hash"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// simple check to ensure destination hash is valid
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3timeout Tff7b72== Tff7b72null Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3timeout Tff7b72< T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"ping.timeout_must_be_number"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// we are now running ping
Tff7b72thisTb4b4b4.Te6edf3seq Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isRunning Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3abortController Tff7b72= Tff7b72new Te6edf3AbortControllerTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// run ping until stopped
Tff7b72while Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isRunningTb4b4b4) Tb4b4b4{
T8b949e// run ping
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3pingTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// wait a bit before running next ping
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3sleepTb4b4b4(T79c0ff1000Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3stopTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isRunning Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3abortControllerTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3abortControllerTb4b4b4.Te6edf3abortTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3clearTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3pingResults Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastPingSummary Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3sleepTb4b4b4(Te6edf3millisTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4) Tb4b4b4=> Te6edf3setTimeoutTb4b4b4(Te6edf3resolveTb4b4b4, Te6edf3millisTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3pingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3seqTff7b72++Tb4b4b4;
T8b949e// ping destination
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/ping/Tffd700${Tff7b72thisTb4b4b4.Te6edf3destinationHashTffd700}Ta5d6ff/lxmf.deliveryTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3signalTff7b72: Tff7b72thisTb4b4b4.Te6edf3abortControllerTb4b4b4.Te6edf3signalTb4b4b4,
Te6edf3paramsTff7b72: Tb4b4b4{
Te6edf3timeoutTff7b72: Tff7b72thisTb4b4b4.Te6edf3timeoutTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3pingResult Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3ping_resultTb4b4b4;
Tff7b72const Te6edf3rttMilliseconds Tff7b72= Tb4b4b4(Te6edf3pingResultTb4b4b4.Te6edf3rtt Tff7b72* T79c0ff1000Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rttDurationString Tff7b72= Ta5d6ff`Tffd700${Te6edf3rttMillisecondsTffd700}Ta5d6ffmsTa5d6ff`Tb4b4b4;
Tff7b72const Te6edf3info Tff7b72= Tb4b4b4[
Ta5d6ff`Ta5d6ffseq=Tffd700${Tff7b72thisTb4b4b4.Te6edf3seqTffd700}Ta5d6ff`Tb4b4b4,
Ta5d6ff`Ta5d6ffduration=Tffd700${Te6edf3rttDurationStringTffd700}Ta5d6ff`Tb4b4b4,
Ta5d6ff`Ta5d6ffhops_there=Tffd700${Te6edf3pingResultTb4b4b4.Te6edf3hops_thereTffd700}Ta5d6ff`Tb4b4b4,
Ta5d6ff`Ta5d6ffhops_back=Tffd700${Te6edf3pingResultTb4b4b4.Te6edf3hops_backTffd700}Ta5d6ff`Tb4b4b4,
Tb4b4b4]Tb4b4b4;
T8b949e// add rssi if available
Tff7b72if Tb4b4b4(Te6edf3pingResultTb4b4b4.Te6edf3rssi Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3infoTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff`Ta5d6ffrssi=Tffd700${Te6edf3pingResultTb4b4b4.Te6edf3rssiTffd700}Ta5d6ffdBmTa5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// add snr if available
Tff7b72if Tb4b4b4(Te6edf3pingResultTb4b4b4.Te6edf3snr Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3infoTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff`Ta5d6ffsnr=Tffd700${Te6edf3pingResultTb4b4b4.Te6edf3snrTffd700}Ta5d6ffdBTa5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// add signal quality if available
Tff7b72if Tb4b4b4(Te6edf3pingResultTb4b4b4.Te6edf3quality Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3infoTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff`Ta5d6ffquality=Tffd700${Te6edf3pingResultTb4b4b4.Te6edf3qualityTffd700}Ta5d6ff%Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// add receiving interface
Te6edf3infoTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff`Ta5d6ffvia=Tffd700${Te6edf3pingResultTb4b4b4.Te6edf3receiving_interfaceTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
T8b949e// update ui
Tff7b72thisTb4b4b4.Te6edf3addPingResultTb4b4b4(Te6edf3infoTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff" "Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastPingSummary Tff7b72= Tb4b4b4{
Te6edf3durationTff7b72: Te6edf3rttDurationStringTb4b4b4,
Te6edf3hopsThereTff7b72: Te6edf3pingResultTb4b4b4.Te6edf3hops_thereTb4b4b4,
Te6edf3hopsBackTff7b72: Te6edf3pingResultTb4b4b4.Te6edf3hops_backTb4b4b4,
Te6edf3rssiTff7b72: Te6edf3pingResultTb4b4b4.Te6edf3rssiTb4b4b4,
Te6edf3snrTff7b72: Te6edf3pingResultTb4b4b4.Te6edf3snrTb4b4b4,
Te6edf3qualityTff7b72: Te6edf3pingResultTb4b4b4.Te6edf3qualityTb4b4b4,
Te6edf3viaTff7b72: Te6edf3pingResultTb4b4b4.Te6edf3receiving_interfaceTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
T8b949e// ignore cancelled error
Tff7b72if Tb4b4b4(Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3isCancelTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// add ping error to results
Tff7b72const Te6edf3message Tff7b72= Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72?? Te6edf3eTb4b4b4.Te6edf3message Tff7b72?? Tffa657StringTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3warnTb4b4b4(Ta5d6ff"Ping failed:"Tb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3addPingResultTb4b4b4(Ta5d6ff`Ta5d6ffseq=Tffd700${Tff7b72thisTb4b4b4.Te6edf3seqTffd700}Ta5d6ff error=Tffd700${Te6edf3messageTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3lastPingSummary Tff7b72= Tb4b4b4{
Te6edf3errorTff7b72: Tff7b72typeof Te6edf3message Tff7b72=== Ta5d6ff"string" Tff7b72? Te6edf3message Tff7b72: Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3dropPathTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// simple check to ensure destination hash is valid
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3destinationHash Tff7b72== Tff7b72null Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3destinationHashTb4b4b4.Te6edf3length Tff7b72!== T79c0ff32Tb4b4b4) Tb4b4b4{
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"ping.invalid_hash"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/destination/Tffd700${Tff7b72thisTb4b4b4.Te6edf3destinationHashTffd700}Ta5d6ff/drop-pathTa5d6ff`Tb4b4b4)Tb4b4b4;
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3messageTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3message Tff7b72= Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72?? Ta5d6ff`Ta5d6ffFailed to drop path: Tffd700${Te6edf3eTffd700}Ta5d6ff`Tb4b4b4;
Te6edf3DialogUtilsTb4b4b4.Te6edf3alertTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3addPingResultTb4b4b4(Te6edf3resultTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3pingResultsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3resultTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3scrollPingResultsToBottomTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3scrollPingResultsToBottomTff7b72: Tff7b72function Tb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// next tick waits for the ui to have the new elements added
Tff7b72thisTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
T8b949e// set timeout with zero millis seems to fix issue where it doesn't scroll all the way to the bottom...
Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3container Tff7b72= Tffa657documentTb4b4b4.Te6edf3getElementByIdTb4b4b4(Ta5d6ff"results"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3containerTb4b4b4) Tb4b4b4{
Te6edf3containerTb4b4b4.Te6edf3scrollTop Tff7b72= Te6edf3containerTb4b4b4.Te6edf3scrollHeightTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────